<?php

namespace app\api\controller;

use think\Controller;
use think\Db;

class Web extends Controller
{    //个人中心 需验证登陆
    public function _empty($name)
    {
        die('非法访问！你的IP已被监控！');
    }

    public function _initialize()
    {
        header('Access-Control-Allow-Origin:*');//允许所有来源访问
        header('Access-Control-Allow-Method:POST,GET');//允许访问的方式
        header('Access-Control-Allow-Headers:x-requested-with,content-type');//
        //系统参数
        $appdata = request()->param();
        //业务通用常量 避免不必要的重复获取查询
        $this->appdata = $appdata;    //接收的所有数据 含header
        $this->setting = setting();
    }

    /**
     * @abstract 注册接口
     * @return string apifasong()
     */
    public function ajax_userinfo_add()
    {    //ajax请求用户信息


        $appdata = $this->appdata;
        $setting = $this->setting;
        //必填项检测
        if (!isset($appdata['uname']) and empty($appdata['uname'])) {
            apifasong(['zt' => '0', 'msg' => '请输入账号']);
        }
        if (!isset($appdata['pwd']) and empty($appdata['pwd'])) {
            apifasong(['zt' => '0', 'msg' => '请输入登录密码']);
        }
        if (!isset($appdata['repwd']) and empty($appdata['repwd'])) {
            apifasong(['zt' => '0', 'msg' => '请验证登录密码']);
        }

        //推荐人检测暂时不开启
        $tjm = isset($appdata['tjm']) ? $appdata['tjm'] : '';
        if (empty($tjm)) {
            apifasong(['zt' => '0', 'msg' => '推荐码不能为空']);
        }
        $tid = authcodenum($tjm);
        $tjr = userinfobyid($tid);

        if (!$tid || !$tjr) {
            apifasong(['zt' => '0', 'msg' => '推荐码不正确']);
        } elseif ($tjr['zt'] <> 1) {
            apifasong(['zt' => '0', 'msg' => '推荐码不可用']);
        }


        //用户名检测
        if (!preg_match("/^[1][0-9]{10}$/", $appdata['uname'])) {
            apifasong(['zt' => '0', 'msg' => '手机号码不正确']);
        }
        //排除注册号段
        $no_register = explode(',', $setting['no_register']);
        if (in_array(substr($appdata['uname'], 0, 3), $no_register)) {
            apifasong(['zt' => '0', 'msg' => '此号段禁止注册']);
        }
        //将$answer去除空格,正则表达式 ：
        $appdata['uname'] = preg_replace('/\s/', '', $appdata['uname']);
        //将$answer中的小写字母转换为大写
        $appdata['uname'] = strtolower($appdata['uname']);
        if (!ctype_alnum($appdata['uname'])) {
            apifasong(['zt' => '0', 'msg' => '账号只能是字母或数字的组合']);
        }
        if (strlen($appdata['uname']) < 6) {
            apifasong(['zt' => '0', 'msg' => '账号最少6位']);
        }

        $uname = userinfobyuname($appdata['uname']);
        if ($uname) {
            apifasong(['zt' => '0', 'msg' => '该账号已被使用']);
        }

        //密码检测
        if (strlen($appdata['pwd']) < 6) {
            apifasong(['zt' => '0', 'msg' => '密码最少6位']);
        }
        if ($appdata['pwd'] <> $appdata['repwd']) {
            apifasong(['zt' => '0', 'msg' => '两次输入密码不一致']);
        }
        //短信验证码检测
        if ($appdata['yzm'] <> '999888') {  //通行（不验证）验证码。。？
            $wheresms['uname'] = $appdata['uname'];
            $wheresms['code'] = $appdata['yzm'];
            $sms = db('smscode')->where($wheresms)->find();
            if (!$sms) {
                apifasong(['zt' => '0', 'msg' => '手机验证码不正确']);
            } elseif (time() - $sms['sendtime'] > $setting['sms_time']) {
                apifasong(['zt' => '0', 'msg' => '验证码已过期']);
            }
        }

        Db::startTrans();   // 启动事务-------------
        $nickname = $this->randomkeys(8);
        $uid = db('user')->insertGetId([
            'uname' => $appdata['uname'],
            'tid' => $tjr['id'],
            'tname' => $tjr['uname'],
            'pwd' => md5($appdata['pwd']),
            //'secpwd'=>md5('123456'),    //默认二级密码
            'regtime' => time(),
            'regip' => request()->ip(),
            'ipinfo' => get_ip_city(request()->ip()),
            'tpath' => $tjr['tpath'] . ',' . $tjr['id'],
            'lv' => '0',
            'headimg' => 'image/headimg.png',
            'nicename' => $nickname
        ]);
        $res = Db('user')->where(['id' => $tjr['id']])->setInc('tj_num', 1);

        // 注册生成用户钱包
        $wallet = wallet_api();
        $data['privatekey'] = $wallet['data']['PrivateKey'];
        $data['address'] = $wallet['data']['address'];
        $data['uid'] = $uid;
        $wallet = db('wallet')->insert($data);

        //返回数据
        if ($uid && $res) {
            Db::commit();       // 提交事务-------------
            apifasong(['zt' => '1', 'msg' => '注册成功', 'data' => apiuserbaseinfo($appdata['uname'])]);
        } else {
            Db::rollback();     // 回滚事务-------------
            apifasong(['zt' => '0', 'msg' => '注册失败']);
        }


    }

    /**
     * @name 发送手机验证码
     * @author zay
     * @Date 2020/3/27 0027 09:38
     */
    public function yzm_creat()
    {  //发送注册验证码API（无需验证登陆）
        //优化方案：判断上次发送 如是1分钟内 禁止发送
        $appdata = $this->appdata;
        //必填项检测
        if (!isset($appdata['uname'])) {
            apifasong(['zt' => '0', 'msg' => '请输入手机号']);
        }
        //获取上次发送验证码的时间
        $last_send = Db('smscode')->where(['uname' => $appdata['uname']])->find();
        $expire_time = setting('sms_time');
        if ($last_send && $last_send['sendtime'] + $expire_time > time()) {
            apifasong(['zt' => '0', 'msg' => '发送太频繁']);
        }
        //检查用户是否存在
        $uname = userinfobyuname($appdata['uname']);
        //添加短信条数验证
        $sms_num = Db('smscode')->where(['uname' => $appdata['uname']])->count();
        if ($sms_num >= setting('sms_num')) {
            apifasong(['zt' => '0', 'msg' => '今天短信条数已达上限']);
        }
        if ($uname) {
            apifasong(['zt' => '0', 'msg' => '该手机号已被使用']);
        } else {
            $retsms = sendsms($appdata['uname'], 'zhuce');
            apifasong($retsms);
        }
    }

    //生成随机的字母数字组合
    private function randomkeys($length)
    {
        $key = '';
        $pattern = '1234567890abcdefghijklmnopqrstuvwxyz
                   ABCDEFGHIJKLOMNOPQRSTUVWXYZ';
        for ($i = 0; $i < $length; $i++) {
            $key .= $pattern{mt_rand(0, 35)};    //生成php随机数
        }
        return $key;
    }
}